package com.uniflow.mapper;

import com.uniflow.entity.Role;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 角色数据访问层
 */
@Mapper
public interface RoleMapper {
    
    /**
     * 根据ID查询角色
     */
    Role selectById(@Param("id") String id);
    
    /**
     * 根据名称查询角色
     */
    Role selectByName(@Param("name") String name);
    
    /**
     * 查询所有角色
     */
    List<Role> selectAll();
    
    /**
     * 查询角色列表
     */
    List<Role> selectList(@Param("keyword") String keyword);
    
    /**
     * 查询角色总数
     */
    Long selectCount(@Param("keyword") String keyword);
    
    /**
     * 根据用户ID查询角色列表
     */
    List<Role> selectByUserId(@Param("userId") String userId);
    
    /**
     * 插入角色
     */
    int insert(Role role);
    
    /**
     * 批量插入角色
     */
    int insertBatch(@Param("roles") List<Role> roles);
    
    /**
     * 根据ID更新角色
     */
    int updateById(Role role);
    
    /**
     * 根据ID删除角色
     */
    int deleteById(@Param("id") String id);
    
    /**
     * 批量删除角色
     */
    int deleteBatch(@Param("ids") List<String> ids);
    
    /**
     * 检查角色名称是否存在
     */
    boolean existsByName(@Param("name") String name, @Param("excludeId") String excludeId);
    
    /**
     * 为用户分配角色
     */
    int assignRoleToUser(@Param("userId") String userId, @Param("roleId") String roleId);
    
    /**
     * 移除用户角色
     */
    int removeRoleFromUser(@Param("userId") String userId, @Param("roleId") String roleId);
    
    /**
     * 清空用户所有角色
     */
    int clearUserRoles(@Param("userId") String userId);
    
    /**
     * 批量为用户分配角色
     */
    int batchAssignRolesToUser(@Param("userId") String userId, @Param("roleIds") List<String> roleIds);
    
    /**
     * 检查用户是否拥有指定角色
     */
    boolean hasRole(@Param("userId") String userId, @Param("roleId") String roleId);
    
    /**
     * 检查用户是否拥有指定权限
     */
    boolean hasPermission(@Param("userId") String userId, @Param("permission") String permission);
}